home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / pascal / swag / unitinfo.swg / 0004_DLL Information.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1995-03-26  |  5.4 KB  |  187 lines

  1. {
  2. > I'm having some problems with putting DLL'd routines into my program.
  3. }
  4.  
  5. {---HELLO.PAS---}  { a sample DLL }
  6.  
  7. Library Hello;
  8.  
  9. Function HelloWorld : PChar; export;
  10. Begin
  11.   HelloWorld := 'Hello, world! Greetings from HELLO.DLL!'
  12. End; { HelloWorld }
  13.  
  14. exports
  15.   HelloWorld index 1;
  16.  
  17. Begin
  18. End.
  19.  
  20. {---END---}
  21.  
  22. {---DLLDEMO.PAS---} { a sample program that uses routine from HELLO.DLL }
  23.  
  24. Program DLLDemo;
  25.  
  26. uses WinCrt;
  27.  
  28. const
  29.   DLLName = 'HELLO';
  30.  
  31. Function HelloWorld : PChar; far; external DLLName;
  32.  
  33. Begin
  34.   WriteLn(HelloWorld)
  35. End.
  36.  
  37. {---END---}
  38. (*
  39. And RTM:
  40.  
  41. In the Windows and protected mode environments, dynamic-link libraries
  42. (DLLs) permit several applications to share code and resources.
  43.  
  44. A DLL is an executable module (extension .DLL) that contains code or
  45. resources that are used by other DLLs or applications.
  46.  
  47. DLLs provide the ability for multiple programs ("clients") to share a single
  48. copy of a routine they have in common. The .DLL file must be present when
  49. the client program runs.
  50.  
  51. The Borland Pascal concept most comparable to a DLL is a unit. However,
  52. routines in units are linked into your executable at link time ("statically
  53. linked"), whereas DLL routines reside in a seperate file and are made
  54. available at run time ("dynamically linked").
  55.  
  56. When the program is loaded into memory, the Windows or DOS protected mode
  57. program loader dynamically links the procedure and function calls in the
  58. program to their entry points in the DLLs used by the program.
  59.  
  60. A Borland Pascal application can use DLLs that were not written in Borland
  61. Pascal. Also, programs written in other languages can use DLLs written in
  62. Borland Pascal.
  63.  
  64. DLLs that are compiled for Windows can also be used in DOS protected mode if
  65. the DLLs use only the Windows functions defined in WinAPI.unit. This subset
  66. of the Windows API is emulated by the DOS protected mode Run-Time Manager,
  67. allowing one DLL file to run in Windows or in DOS without recompiling.
  68.  
  69.  Using DLLs
  70.  ▀▀▀▀▀▀▀▀▀▀▀▀
  71. There are two ways to access and call a DLL function:
  72.  
  73.   1. Using an external declaration in your program.
  74.   2. Using GetProcAddress to initialize procedure pointers in your program.
  75.  
  76. In order for a module to use a procedure or function that is in a DLL, it
  77. imports the procedure or function using an external declaration.
  78.  
  79. In imported procedures and functions, the external directive takes the place
  80. of the declaration and statement parts that would otherwise be present.
  81.  
  82. Imported procedures and functions behave just like normal ones, except they
  83. must use the far call model (use a far procedure directive or a
  84. {$F+} compiler directive.)
  85.  
  86. Borland Pascal provides three ways to import procedures and functions:
  87.  
  88.   - by name
  89.   - by new name
  90.   - by ordinal
  91.  
  92. Although a DLL can have variables, it is not possible to import them in to
  93. other modules. Any access to a DLL's variables must take place through a
  94. procedural interface.
  95.  
  96.  Example:
  97. This external declaration imports the function GlobalAlloc from the DLL
  98. called KERNEL (the Windows kernel):
  99.  
  100.    function GlobalAlloc(Flags: Word; Bytes: Longint): THandle; far; external
  101.     'KERNEL' index 15;
  102.  
  103. Note: The DLL name specified after the external keyword and the new name
  104. specified in a name clause do not have to be string literals. Any constant
  105. string expression is allowed.
  106.  
  107. Likewise, the ordinal number specified in an index clause can be any
  108. constant-integer expression. For example:
  109.  
  110.    const
  111.      TestLib = 'TESTLIB';
  112.      Ordinal = 5;
  113.  
  114.    procedure ImportByName;    external TestLib;
  115.    procedure ImportByNewName; external TestLib name 'REALNAME';
  116.    procedure ImportByOrdinal; external TestLib index Ordinal;
  117.  
  118.  Writing DLLs
  119.  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  120. The structure of a Borland Pascal DLL is identical to that of a program,
  121. except that a DLL starts with a library header instead of a program header.
  122.  
  123. The library header tells Borland Pascal to produce an executable file with
  124. the extension .DLL instead of .EXE. It also ensures that the executable file
  125. is marked as being a DLL.
  126.  
  127. If procedures and functions are to be exported by a DLL, they must be
  128. compiled with the export procedure directive.
  129.  
  130.  Example:
  131. This implements a very simple DLL with two exported functions:
  132. *)
  133.    library MinMax;
  134.  
  135.    {The export procedure directive prepares Min and Max for exporting}
  136.  
  137.    function Min(X, Y: Integer): Integer; export;
  138.    begin
  139.      if X < Y then Min := X else Min := Y;
  140.    end;
  141.  
  142.    function Max(X, Y: Integer): Integer; export;
  143.    begin
  144.      if X > Y then Max := X else Max := Y;
  145.    end;
  146.  
  147.    {The exports clause actually exports the two routines, supplying an
  148.     optional ordinal number for each of them}
  149.  
  150.    exports
  151.      Min index 1,
  152.      Max index 2;
  153.  
  154.    begin
  155.    end.
  156. (*
  157. Libraries often consist of several units. In such cases, the library source
  158. file itself is frequently reduced to a uses clause, an exports clause, and
  159. the library's initialization code.
  160.  
  161. For example:
  162. *)
  163.    library Editors;
  164.  
  165.    uses EdInit, EdInOut, EdFormat, EdPrint;
  166.  
  167.    exports
  168.      InitEditors index 1,
  169.      DoneEditors index 2,
  170.      InsertText index 3,
  171.      DeleteSelection index 4,
  172.      FormatSelection index 5,
  173.      PrintSelection index 6,
  174.       .
  175.       .
  176.      SetErrorHandler index 53;
  177.  
  178.    begin
  179.      InitLibrary;
  180.    end.
  181.  
  182.  
  183. (*
  184. Sooo, i hope that i helped u a little byte. BTW, the information above was
  185. taken from Borland Pascal help file.
  186. *)
  187.